package cn.south.campus.business.service;

import cn.south.campus.business.model.entity.Complaint;
import cn.south.campus.business.model.req.ComplaintReq;
import cn.south.campus.business.model.vo.ComplaintVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 校园吐槽表 服务类
 * </p>
 *
 * @author chow
 * @since 2024-12-05
 */
public interface ComplaintService extends IService<Complaint> {

    /**
     * 校园吐槽分页查询
     *
     * @param query 条件
     * @return 分页数据
     */
    IPage<ComplaintVo> pageQuery(ComplaintReq query);

    /**
     * 我的校园吐槽分页查询
     *
     * @param query 条件
     * @return 分页数据
     */
    IPage<ComplaintVo> pageQueryMe(ComplaintReq query);
    /**
     * 校园吐槽详情
     * @param id 校园吐槽id
     * @return 校园吐槽详情
     */
    ComplaintVo detail(Long id);

    /**
     * 我的校园吐槽详情
     * @param id 校园吐槽id
     * @return 校园吐槽详情
     */
    ComplaintVo detailMe(Long id);
    /**
     * 删除校园吐槽
     *
     * @param id 校园吐槽id
     */
    void deleteComplaint(Long id);

    /**
     * 更新校园吐槽
     *
     * @param complaint 校园吐槽
     */
    void updateComplaint(ComplaintVo complaint);

    /**
     * 添加校园吐槽
     *
     * @param complaint 校园吐槽
     */
    void addComplaint(ComplaintVo complaint);

    /**
     * 发布校园吐槽
     *
     * @param id     校园吐槽id
     * @param status 状态
     */
    void updateStatusComplaint(Long id, Integer status);

    /**
     * 点赞校园吐槽
     *
     * @param id 校园吐槽id
     */
    void agreeComplaint(Long id);

    /**
     * 点踩
     *
     * @param id 校园吐槽id
     */
    void rejectComplaint(Long id);

    /**
     * 我的点赞/点踩分页查询
     *
     * @return 分页数据
     */
    IPage<ComplaintVo> pageMyOpt(ComplaintReq query);
}
